<?php

require __DIR__ . '/../../vendor/autoload.php';
require __DIR__ . '/../Mqtt.php';

$mqtt = new Mqtt;
$mqtt->createChannel();

$queueName = 'queue1';
$exchangeName = 'test-exchange';

/**
 * @param $exchange, 交换机名称
 * @param $type, 交换机类型：fanout, direct, topic
 * @param $passive = false, 设置为true表示：如果存在这个交换机则返回交换机的信息 ，如果不存在则抛异常
 * @param $durable = false, 设置true表示将将换机存盘，在服务器重启时不会丢失相关信息
 * @param $auto_delete = true, 设置true表示 自动删除交换机，至少1个队列或交换机与这个交换机绑定对队列解绑
 * @param $internal = false, 设置true表示是内部交换机，客户端不能直接发消息到这个交换机中，只能通过路由
 * @param $nowait = false, 设置true表示不等待处理结果
 */
$mqtt->createExchange($exchangeName, 'fanout');

/*
创建非持久队列，消费者断开时，队列删除：
    @param queueName 队列名称，
    @param passive 设置为true表示：如果存在这个队列则返回队列的信息 ，如果不存在这个队列则抛异常
    @param durable 是否持久化（重启后队列还存在） 
    @param exclusive 是否独占队列，该队列仅对首次声明它的连接可见，并在连接断开时自动删除
    @param auto_delete 所有消费断开连接后是否自动删除队列
    @param nowait = false 不等待处理结果
*/
$mqtt->createQueue($queueName);

/**
 * 绑定交换机和队列
 * @param   $queue,
 * @param   $exchange,
 * @param   $routing_key = '',
 * @param   $nowait = false,
 */
$mqtt->bindQueueAndExchange($queueName, $exchangeName);

/**
 * @param $queue = '', //队列名称
 * @param $consumer_tag = '', //消费者标签
 * @param $no_local = false, //属于AMQP的标准,但是rabbitMQ并没有做实现.
 * @param $no_ack = false, //false表示收到消息后需要回复确认才被认为被消费
 * @param $exclusive = false, //true表示：这个队列只能由一个消费者消费
 * @param $nowait = false, //true表示不需等待执行结果
 * @param $callback = null, //回调
 */
$mqtt->consumeMsg(function($msg){
    echo $msg . PHP_EOL;
});

$mqtt->close();
